# -*- coding: utf-8 -*-

from django.shortcuts import render_to_response
from django.http import HttpResponseRedirect
import re
from django.contrib.auth.models import User
from konto.models import *
from django.contrib.auth import login, logout, authenticate
from django.template import Variable
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse
from django.template import RequestContext
import pycurl
import StringIO

import gdata.docs.service

scope='http://docs.google.com/feeds/ https://mail.google.com/mail/feed/atom/'

try:
	next=settings.LOGIN_URL
except:
	raise Exception

def logowanie(request,):
	"""
	jesli uzytkownik nie jest zalogowany w google, zostaje przekierowany na strone logowania, jesli ono sie powiedzie, zostaje zalogowany w bridgu
	czy uzytkownik jest zalogowany sprawdzamy przez request.user.is_authenticated()
	"""


	def zaloguj(request):
		if 'token' not in request.GET:
			return False
		else:
			fakeUrl='http://example.com/?token=' + request.GET['token']
			single_use_token = gdata.auth.extract_auth_sub_token_from_url(fakeUrl)

			docs_service=gdata.docs.service.DocsService()
			docs_service.UpgradeToSessionToken(single_use_token)

			if docs_service.current_token:
				request.session['token']=docs_service.current_token
				return True
			else:
				return False

	def pobierzUsername(request):
                if 'token' in request.session:
			token=request.session['token'].get_token_string()

			conn=pycurl.Curl()
			conn.setopt(pycurl.URL, 'https://mail.google.com/mail/feed/atom/')
			conn.setopt(pycurl.HTTPHEADER, ['Authorization: AuthSub token="%s"' % token])
			connOutput=StringIO.StringIO()
			conn.setopt(pycurl.WRITEFUNCTION, connOutput.write)
			conn.perform()

			dane=connOutput.getvalue()
			
                        global username
                        username=re.search('[a-zA-Z0-9\-\.\_]*@mediaframe.pl', dane)
                        username=username.group().split('@')[0]
			return True
		else:
			return False
	
			
	if not zaloguj(request):
		return HttpResponseRedirect("https://www.google.com/a/mediaframe.pl/AuthSubRequest?next=" + next + "&scope=" + scope + "&hd=mediaframe.pl&session=1")
	else:
		if not pobierzUsername(request):
			return HttpResponseRedirect("https://www.google.com/a/mediaframe.pl/AuthSubRequest?next=" + next + "&scope=" + scope + "&hd=mediaframe.pl&session=1")
		else:
			# jestesmy zalogowani w google, teraz w django
			user=authenticate(username=username, gacc=True)
			login(request, user)
			if user.nowy:
				return HttpResponseRedirect(reverse('konto-edycja'))
			else:
				if request.POST.has_key('next'):
					redirect = request.POST['next']
				else:
					redirect = settings.LOGIN_REDIRECT
				return HttpResponseRedirect(redirect)

def edycjaKonta(request):
	if not request.user.is_authenticated():
		return HttpResponseRedirect(reverse('zaloguj'))

	u=request.user

	if request.POST:
		umf=userModelForm(request.POST, request.FILES, instance=u)
		if umf.is_valid():
			umf.save()
	else:
		umf=userModelForm(instance=u)

	zdjecieOficjalne=''
	zdjecieNieOficjalne=''
	try:
		zdjecieOficjalne=u.zdjecieOficjalne.url
	except:
		pass

	try:
		zdjecieNieOficjalne=u.zdjecieNieOficjalne.url
	except:
		pass

	return render_to_response('konto/edycja.html',{
		'form':umf,
		'username': request.user.username,
		'zdjecieOficjalne':zdjecieOficjalne,
		'zdjecieNieOficjalne':zdjecieNieOficjalne,

		'tagiZainteresowanZawodowych': tagiZainteresowanZawodowychForm(),
		'koloStatus': koloStatusForm(),
		'koloStanowisko': koloStanowiskoForm(),
		'edukacja': edukacjaForm(),
		'doswiadczenieWKole': doswiadczenieWKoleForm(),
		'doswiadczenieZawodowe': doswiadczenieZawodoweForm()
		}, 
		context_instance=RequestContext(request))

def edycjaKontaRelacja(request, x):
	relacje=('tagiZainteresowanZawodowych', 'koloStatus', 'koloStanowisko', 'edukacja', 'doswiadczenieWKole', 'doswiadczenieZawodowe')
	if not request.user.is_authenticated() or x not in relacje:
		return HttpResponseRedirect('/konto/')
	
	if request.POST:
		of={
			'tagiZainteresowanZawodowych': tagiZainteresowanZawodowychForm(request.POST),
			'koloStatus': koloStatusForm(request.POST),
			'koloStanowisko': koloStanowiskoForm(request.POST),
			'edukacja': edukacjaForm(request.POST),
			'doswiadczenieWKole': doswiadczenieWKoleForm(request.POST),
			'doswiadczenieZawodowe': doswiadczenieZawodoweForm(request.POST)
		}[x]

		if of.is_valid():
			o=of.save(commit=False)
			o.user=request.user
			o.save()
	else:
		of={
			'tagiZainteresowanZawodowych': tagiZainteresowanZawodowychForm(),
			'koloStatus': koloStatusForm(),
			'koloStanowisko': koloStanowiskoForm(),
			'edukacja': edukacjaForm(),
			'doswiadczenieWKole': doswiadczenieWKoleForm(),
			'doswiadczenieZawodowe': doswiadczenieZawodoweForm()
		}[x]
		

	return render_to_response('konto/edycjaRelacja.html', {'form':of})
	
def wyloguj(request):
	if request.user.is_authenticated():
		logout(request)
	if request.POST.has_key('next'):
		redirect = request.POST['next']
	else:
		redirect = settings.LOGOUT_REDIRECT
	return HttpResponseRedirect(redirect)

def zawitaj(request):
	return render_to_response("konto/zawitaj.html", locals(), context_instance=RequestContext(request))
